/* eslint-disable max-lines */
import * as BASE from '@/stores/definitions-base';
import { t } from '@lingui/macro';
import React from 'react';
import { Input, Rating } from '@alifd/next';

const {
  DATETIME_TEXT,
  DATE_TEXT,
  TIME_TEXT,
  EMPTY_TEXT,
  ENUMS: ENUMSBase,
  FieldsGrid: FieldGridBase,
  TitleGrid,
  column: columnBase,
  toSelectDataSource,
} = BASE;
export { DATETIME_TEXT, DATE_TEXT, EMPTY_TEXT, TIME_TEXT, TitleGrid, toSelectDataSource };

/**
 * @param {*} path        属性path
 * @param {*} props       column属性
 * @returns column定义
 */
export function column(...args) {
  return columnBase(feedbackModel, ...args);
}

/**
 * 显示一组表单字段
 * ```js
 * {
 *   fields: string[],    // 字段名称，可以使用.来指定嵌套对象属性，例如order.busOrder.shift
 *   columns: number,     // 列数，默认为4,最大为12,最小为1
 *   model: object,       // 字段定义数据模型的根对象，默认不指定，仅在使用子对象作为根模型时设置
 *   overrideModel: object, // 重载字段定义数据模型
 *   mode: string,        // 表单模式，默认为edit，可选view
 *   itemLayout: object,  // FormItem布局配置，默认为{}
 * }
 * ```
 *
 * @param {object} param0
 * @returns
 */
export function FieldsGrid(props) {
  return <FieldGridBase model={feedbackModel} {...props} />;
}

//----------------------------------------------------------------------
export const ENUMS = {
  ...ENUMSBase,
  //  ：1 - 包车订单 2 - 班车订单 3 - 巴士订单
  orderType: {
    1: '包车订单',
    2: '专线订单',
    3: '巴士订单',
  },
  //  ，1:客户2.合伙人3.司机
  userType: {
    1: '客户',
    2: '合伙人',
    3: '司机',
  },
  // <br/> driver-司机对客户评论<br/> customer-客户对司机评论<br/> order-客户对订单评价
  commentType: {
    driver: '司机对客户评论',
    customer: '客户对司机评论',
    order: '客户对订单评价',
  },
};

/**
 * 模型定义:
 * 1. 普通文本仅需要定义label
 * 2. 需要通过枚举转换的值，定义text; 当使用renderer返回组件时，text属性无效，需要通过组件的renderPreview来指定预览时的绘制方式
 * 3. 通用的ui属性需要定制时，定义ui; 特定模式(view, edit, add)下的ui，添加后缀定义为ui_<mode>，例如：ui_view, ui_edit, ui_add, ui_table
 * 4. ui可配置属性包括:
 *    renderer: 内容渲染函数, Form表单中的原型为：(value: any, formData: any, fieldDefinition: any) => ReactNode; Table Column中的原型为: (value: any, columnIndex: number, rowData: any) => ReactNode;
 *    itemProps: 表单Form.Item的属性，可以是对象，或函数({ isPreview: boolean, mode: string, value: any, formData: any, ...otherDefinitions}) => void;
 *    span: Grid Cell占用的列数, 默认为1
 *
 * 【注】获取接口的model定义后，vscode中通过正则替换：^(\s+)"label": "([^']+)"  ===> $1label: t`$2`
 */
export const feedbackModel = {
  user: {
    label: 'xxxx',
    username: {
      label: t`用户账号标识，为accountId@domain转义后的结果，一旦生成不可修改`,
    },
    nickname: {
      label: t`昵称`,
    },
    gender: {
      label: t`性别：1 - 男； 2 - 女`,
    },
    accountId: {
      label: t`集成账号，如第三方系统账号，必须`,
    },
    email: {
      label: t`邮箱账号`,
    },
    status: {
      label: t`状态 1 - 正常；0 - 禁用，只读`,
    },
    fullname: {
      label: t`姓名`,
    },
    mobile: {
      label: t`手机号`,
    },
    remarks: {
      label: t`备注`,
    },
    userTypes: [{
      label: t`用户来源`,
      text: (v) => ENUMS.userType[v],
    }],
    material: [{
      label: t`图片列表`,
    }],
    customerInfo: {
      label: t`cbbv协作平台客户信息`,
      agentId: {
        label: t`cbbv协作平台客户信息，仅userTypes包含类型1时存在该字段`,
      },
      inviteCode: {
        label: t`邀请码 编码-用户类型 例：HbXm6M0-2`,
      },
      customerType: {
        label: t`区域类型，必须，0 - 境内用户(内地)； 1 - 境外用户(港澳台), 对应中港通系统customerStatus`,
      },
      channelId: {
        label: t`用户渠道扫码关联`,
      },
      registerTime: {
        label: t`注册时间`,
      },
      attachments: [{
        label: t`附件`,
        title: {
          label: t`附件标题`,
        },
        description: {
          label: t`附件说明`,
        },
        binaryId: [{
          label: t`附件id`,
        }],
      }],
    },
    partnerInfo: {
      label: t`cbbv协作平台合伙人信息`,
      amount: {
        label: t`合伙人当月的预存款`,
      },
      returnRate: {
        label: t`合伙人当前的返现率，从当月缴存的合作金计算得出`,
      },
      discount: {
        label: t`合伙人当前的折扣率，从当月缴存的合作金计算得出`,
      },
      balance: {
        label: t`合伙人余额`,
      },
      beginDate: {
        label: t`起始时间`,
      },
      endDate: {
        label: t`结束时间`,
      },
      registerTime: {
        label: t`注册时间`,
      },
      enablingClause: {
        label: t`是否授权条款`,
      },
      bindingPeriod: {
        label: t`绑定期限 0，1个月、6个月、1年（12:默认）、-1:永久`,
      },
      companyId: {
        label: t`公司id`,
      },
      companyName: {
        label: t`公司名称`,
      },
      address: {
        label: t`地址`,
      },
      remark: {
        label: t`备注`,
      },
      partnerStatus: {
        label: t`状态 1-启用、0-停用`,
      },
      type: {
        label: t`类型 0：激励型，1：利益型（默认）`,
      },
      cashBackRate: {
        label: t`返现率<br/> bus 巴士票返现率：默认0<br/> charteredBus 包车返现率：默认0.05<br/> shuttleBus 班车票返现率：默认0.1`,
      },
      attachments: [{
        label: t`附件`,
        title: {
          label: t`附件标题`,
        },
        description: {
          label: t`附件说明`,
        },
        binaryId: [{
          label: t`附件id`,
        }],
      }],
      independentAccount: {
        label: t`分账设置信息`,
        period: {
          label: t`分账周期：T+0、T+1、T+2、T+7、T+30(加几值为几，例：T+0 值为0)`,
        },
        suspensionOfDistribution: {
          label: t`暂停分账 true：暂停 false：可分账`,
        },
        settlementOfDriverCharges: {
          label: t`是否委托平台自动结算司机费用`,
        },
        independentAccountType: {
          label: t`分账类型<br/> 0-比例<br/> 1-指定金额`,
        },
        independentAccountValue: {
          label: t`分账值，比例和金额都写三种币种信息<br/> RMB<br/> HKD<br/> MOP`,
        },
        collectionAccountInformation: {
          label: t`收款账户信息`,
          appId: {
            label: t`公众号appId`,
          },
          accountIdentification: {
            label: t`账户标识`,
          },
          name: {
            label: t`名字`,
          },
          type: {
            label: t`分账接收方类型<br/> MERCHANT_ID：商户号<br/> PERSONAL_OPENID：个人openid`,
          },
        },
      },
      discountInfo: {
        label: t`折扣信息`,
        disable: {
          label: t`启用状态 true-禁用 false-启用`,
        },
        failureTime: {
          label: t`失效时间`,
        },
        bus: {
          label: t`巴士折扣信息`,
          type: {
            label: t`折扣类型 0-比例 1-指定金额`,
          },
          discountValue: {
            label: t`折扣值<br/> RMB<br/> HKD<br/> MOP`,
          },
        },
        cc: {
          label: t`包车折扣信息`,
          type: {
            label: t`折扣类型 0-比例 1-指定金额`,
          },
          discountValue: {
            label: t`折扣值<br/> RMB<br/> HKD<br/> MOP`,
          },
        },
        sc: {
          label: t`专线折扣信息`,
          type: {
            label: t`折扣类型 0-比例 1-指定金额`,
          },
          discountValue: {
            label: t`折扣值<br/> RMB<br/> HKD<br/> MOP`,
          },
        },
      },
    },
    driverInfo: {
      label: t`司机信息`,
      companyId: {
        label: t`公司id`,
      },
      auditStatus: {
        label: t`审核状态是否通过`,
      },
      driverStatus: {
        label: t`司机状态 1-启用、0-停用，控制台设置`,
      },
      dutyStatus: {
        label: t`值班状态 1-正常在岗、0-离岗休假，司机可自行设置，离岗后，将不派单给该司机`,
      },
      dutyVehicleId: {
        label: t`值班车辆 正常在岗时，司机可自行选择关联的车辆，也可以后台设置`,
      },
      dateBirth: {
        label: t`出生年月`,
      },
      permanentLand: {
        label: t`常驻地`,
      },
      licenseMainland: {
        label: t`大陆驾驶证信息`,
        licenseNo: {
          label: t`驾驶证号`,
        },
        vechileType: {
          label: t`驾驶车型 选择，大型客车、中型客车、小型客车、大型货车`,
        },
        validityDate: {
          label: t`驾驶证有效期 输入了驾驶证号，就是必填`,
        },
      },
      licenseHK: {
        label: t`香港驾驶证信息`,
        licenseNo: {
          label: t`驾驶证号`,
        },
        vechileType: {
          label: t`驾驶车型 选择，大型客车、中型客车、小型客车、大型货车`,
        },
        validityDate: {
          label: t`驾驶证有效期 输入了驾驶证号，就是必填`,
        },
      },
      internationalLicense: {
        label: t`国际驾照 选择，无（默认）、 大型客车、中型客车、小型客车、大型货车`,
      },
      attachments: [{
        label: t`附件`,
        title: {
          label: t`附件标题`,
        },
        description: {
          label: t`附件说明`,
        },
        binaryId: [{
          label: t`附件id`,
        }],
      }],
      registerTime: {
        label: t`注册时间`,
      },
      hkMobile: {
        label: t`香港电话`,
      },
      number: {
        label: t`身份证号`,
      },
      address: {
        label: t`住址`,
      },
      type: {
        label: t`1商务车司机 2巴士司机`,
      },
      independentAccount: {
        label: t`分账设置信息`,
        period: {
          label: t`分账周期：T+0、T+1、T+2、T+7、T+30(加几值为几，例：T+0 值为0)`,
        },
        suspensionOfDistribution: {
          label: t`暂停分账 true：暂停 false：可分账`,
        },
        settlementOfDriverCharges: {
          label: t`是否委托平台自动结算司机费用`,
        },
        independentAccountType: {
          label: t`分账类型<br/> 0-比例<br/> 1-指定金额`,
        },
        independentAccountValue: {
          label: t`分账值，比例和金额都写三种币种信息<br/> RMB<br/> HKD<br/> MOP`,
        },
        collectionAccountInformation: {
          label: t`收款账户信息`,
          appId: {
            label: t`公众号appId`,
          },
          accountIdentification: {
            label: t`账户标识`,
          },
          name: {
            label: t`名字`,
          },
          type: {
            label: t`分账接收方类型<br/> MERCHANT_ID：商户号<br/> PERSONAL_OPENID：个人openid`,
          },
        },
      },
    },
    conductorInfo: {
      label: t`检票员信息`,
      registerTime: {
        label: t`注册时间`,
      },
      headimgurl: {
        label: t`头像url地址`,
      },
      remarks: {
        label: t`备注`,
      },
      mobile: {
        label: t`手机`,
      },
      fullname: {
        label: t`名称`,
      },
      companyId: {
        label: t`公司id`,
      },
    },
    dispatcherInfo: {
      label: t`调度员信息`,
      registerTime: {
        label: t`注册时间`,
      },
      headimgurl: {
        label: t`头像url地址`,
      },
      remarks: {
        label: t`备注`,
      },
      mobile: {
        label: t`手机`,
      },
      fullname: {
        label: t`名称`,
      },
      companyId: {
        label: t`公司id`,
      },
    },
    counters: {
      label: t`计数统计`,
      ccorder: {
        label: t`包车订单数`,
      },
      scorder: {
        label: t`班车订单数`,
      },
      busorder: {
        label: t`大巴订单数`,
      },
    },
    crBy: {
      label: t`创建者`,
    },
    upBy: {
      label: t`最后修改者`,
    },
    crDate: {
      label: t`创建时间`,
    },
    upDate: {
      label: t`最后修收时间`,
    },
    tenantId: {
      label: t`租户ID`,
    },
    id: {
      label: '',
    },
  },
  id: {
    label: '',
  },
  username: {
    label: t`用户标识`,
  },
  mobile: {
    label: t`手机`,
  },
  content: {
    label: t`内容`,
  },
  userType: {
    label: t`用户来源`,
    text: (v) => ENUMS.userType[v],
  },
  handleStatus: {
    label: t`处理状态：0，未处理，1已处理`,
  },
  handleTime: {
    label: t`处理时间`,
  },
  handlePerson: {
    label: t`处理者`,
  },
  handleRemarks: {
    label: t`处理备注`,
  },
  attachments: [{
    label: t`附件`,
    title: {
      label: t`附件标题`,
    },
    description: {
      label: t`附件说明`,
    },
    binaryId: [{
      label: t`附件id`,
    }],
  }],
  videoFiles: [{
    label: t`视频附件列表，元素为binaryId`,
  }],
  crBy: {
    label: t`创建者`,
  },
  upBy: {
    label: t`最后修改者`,
  },
  crDate: {
    label: t`创建时间`,
    text: DATETIME_TEXT,
    ui: {
      renderer: (v) => <Input value={DATETIME_TEXT(v)} readOnly />,
    },
  },
  upDate: {
    label: t`最后修收时间`,
  },
  tenantId: {
    label: t`租户ID`,
  },
  reviewerName: {
    label: t`评论人姓名`,
  },
  commentedByName: {
    label: t`被评论人姓名`,
  },
  star: {
    label: t`评论星级`,
    text: (v) => (
      <div
        style={{ cursor: 'pointer', display: 'flex', justifyContent: 'center', alignItems: 'center' }}
      >
        <div><span style={{ color: '#5584FF' }}>{v}</span></div>
        <Rating count={1} allowHalf disabled defaultValue={1} />
      </div>
    ),
    ui: {
      renderer: (v) => (
        <div
          style={{ cursor: 'pointer', display: 'flex', justifyContent: 'flex-start', alignItems: 'center' }}
        >
          <div><span style={{ color: '#5584FF' }}>{v}</span></div>
          <Rating count={1} allowHalf disabled defaultValue={1} />
        </div>
      ),
    },
  },
  comment: {
    label: t`评论内容`,
  },
  orderType: {
    label: t`订单类型<br/> 1-包车订单<br/> 2-班车订单<br/> 3-巴士订单`,
  },
  commentDate: {
    label: t`评论时间`,
  },
  commentType: {
    label: t`评论类型`,
    text: (v) => ENUMS.commentType[v],
  },
  reviewer: {
    label: t`评论人`,
  },
  commentedBy: {
    label: t`被评论人`,
  },
  orderId: {
    label: t`订单id`,
  },
};
